package api

import (
	"encoding/json"
	"land/config"
	"land/models"
	"log"
	"net/http"
	"strconv"
	// "gorm.io/driver/mysql"
)

// 返回用户和评论
// 查找过往评论，返回评论列表
func GetCommentsHandler(w http.ResponseWriter, r *http.Request) {

	config.AllowCors(w)

	log.Printf("GetCommentsHandler 被调用")
	//读取前端返回数据
	// var GetUser models.GetUserData
	// if err := json.NewDecoder(r.Body).Decode(&GetUser); err != nil {
	// 	http.Error(w, "无效的请求数据", http.StatusBadRequest)
	// 	log.Printf("解析请求数据时出错: %v", err)
	// 	log.Printf("请求数据: %v", r.Body)
	// 	return
	// }
	// log.Printf("请求数据: %v", GetUser)
	// 使用结构体存储评论和用户信息
	var responses []models.CommentResponse

	// 查询所有评论
	var comments []models.Comment
	if err := config.Db.Find(&comments).Error; err != nil {
		http.Error(w, "无法获取评论", http.StatusInternalServerError)
		log.Printf("获取评论时出错: %v", err)
		return
	}

	// 遍历评论，获取用户信息并填充 CommentResponse 结构体
	for _, comment := range comments {
		var user models.User
		if err := config.Db.Where("id = ?", comment.UID).First(&user).Error; err != nil {
			continue // 如果找不到用户，跳过这条评论
		}

		responses = append(responses, models.CommentResponse{
			Text:        comment.Text,
			Username:    user.Username,
			Userpic:     *user.Userpic,
			Createdtime: comment.Createdtime, // 格式化时间
		})
	}

	w.Header().Set("Content-Type", "application/json")
	//返回评论信息
	if err := json.NewEncoder(w).Encode(responses); err != nil {
		http.Error(w, "响应编码失败", http.StatusInternalServerError)
		log.Printf("响应编码失败: %v", err)
	}
}

// 添加评论
func AddCommentHandler(w http.ResponseWriter, r *http.Request) {

	config.AllowCors(w)

	// 解析表单数据
	if err := r.ParseMultipartForm(10 << 20); err != nil { // 设置最大上传文件大小为10MB
		http.Error(w, "无法解析表单", http.StatusBadRequest)
		log.Printf("解析表单数据时出错: %v", err)
		return
	}

	// 获取表单中的数据
	uidStr := r.FormValue("uid")
	text := r.FormValue("text")
	createdTime := r.FormValue("createdtime")

	// 将字符串转换为 uint
	uid, err := strconv.ParseUint(uidStr, 10, 32) // 10表示基数，32表示结果的位数
	if err != nil {
		http.Error(w, "无效的 uid", http.StatusBadRequest)
		log.Printf("解析 uid 出错: %v", err)
		return
	}
	// 创建评论对象
	comment := models.Comment{
		UID:         uint(uid),
		Text:        text,
		Createdtime: createdTime,
	}

	// 保存评论到数据库
	if err := config.Db.Create(&comment).Error; err != nil {
		http.Error(w, "无法添加评论", http.StatusInternalServerError)
		log.Printf("添加评论时出错: %v", err)
		return
	}

	// 声明一个 user 变量，用于存储从数据库中查询的用户信息。
	var user models.User
	if err := config.Db.Where("id = ?", comment.UID).First(&user).Error; err != nil {
		http.Error(w, "用户不存在", http.StatusUnauthorized)
		return
	}

	// 准备响应数据
	response := map[string]interface{}{
		"username":    user.Username,
		"text":        comment.Text,
		"createdtime": comment.Createdtime, // 格式化时间
	}

	// 返回成功响应
	// 返回成功响应的 JSON 数据
	w.WriteHeader(http.StatusCreated)
	w.Header().Set("Content-Type", "application/json")
	json.NewEncoder(w).Encode(response)
}
